 <!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>

<body>

</body>
<script>
  //箭头函数
  (function () {
    var a = 2;
    var obj = {
      a: 1,
      fn: function () {
        console.log(this);
        setTimeout(() => {
          console.log(this);
          setTimeout(() => {
            console.log(this);
          }, 500)
        }, 100)
      }
    }
    obj.fn()

    //箭头函数的写法
    //是一个匿名函数 ()里面写形参,{}里面写代码,匿名函数里的this指向的就是父级作用域里的this
    // var fn = ()=>{}
    //简写  如果函数只有一个参数  var fn = (a,b)=>{}   var fn1 = a => {}  
    //函数可以有return  箭头函数如果只有一行代码,可以省略{},然后自带return效果   
    //var fn = (a,b) => {return a + b}  --->  fn(1,2); 简写--->  var fn = (a,b) => a + b 调用fn(1,2)
  })()


    //let const
    ; (function () {
      //let  const是块级作用域,没有预解析,什么时候定义,什么时候用,块级作用域就是在最近的{}里起作用
      function fn() {
        if (false) {
          let a = '你好';
          console.log(a)
        } else {
          console.log(a)
        }
      }
      fn();

      //const  是定义常量 可以用来定义对象
      const obj = [1, 2, 3, 4];
      obj = []
    })()

    //函数默认参数
    ; (function () {
      function fn(sum = 1) {
        console.log(sum);
      }
      fn();
    })()
    //拓展对象
    ; (function () {
      const name = 'ls';

      const obj = {
        name,
        fn: function(){console.log(1)} = fn(){console.log(1)},//es6语法没有':function'。着这里。fn是个属性，属性内容是个自调用函数。
        
      }
      obj.fn1();
    })()


    //数组,对象的解构

    ; (function () {
      const obj = {
        name1: 'ls',
        age: 18
      }
      var a = obj.name1;
      var b = obj.age;

      var {name1} = obj;
      console.log(name1,age)

      const arr = [1,23,4,5];
      const [a,b] = arr;
      console.log(a,b)
    })()

    //展开运算符
    ; (function () {
      const obj1 = {
        name1: 'ls',
        age: 18,
        sex: '男'
      }
      const obj2 = {
        a: 1,
        b: 2
      }
      const {name1,...rest} = obj;
      console.log(name1,rest);
      const obj3 = {...obj1,...obj2};

    })()
</script>

</html>